package com.demo.commons.DTO;

import com.demo.commons.enums.Type;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.HashMap;

/**
 *@author zwy
 *@date 2023/8/9 20:10
 * 异常统一返回
*/

@NoArgsConstructor
@ToString
public class ExResult extends HashMap<String,Object> {
    private static final long serialVersionUID = 1L;
    public static final String  CODE_TAG = "code";
    public static final String MSG_TAG = "msg";
    public static final String DATA_TAG = "data";
    /**
     * 状态类型
     */
    private Type type;
    /**
     * 状态码
     */
    private Integer code;
    /**
     * 返回内容
     */
    private String msg;
    /**
     * 返回对象
     */
    private Object data;
    /**
     * 初始构造
     * @param type 状态类型
     * @param msg  返回内容
     */
    public ExResult(Type type,String msg) {
        super.put(CODE_TAG,type.value());
        super.put(MSG_TAG,msg);
    }
    /**
     * 初始构造
     * @param type  返回状态
     * @param msg   返回内容
     * @param data  返回数据
     */
    public ExResult(Type type,String msg,Object data) {
        super.put(CODE_TAG,type.value());
        super.put(MSG_TAG,msg);
        super.put(DATA_TAG, data);
    }
    /**
     * 返回成功消息
     * @param msg 返回内容
     * @return 成功消息
     */
    public static ExResult success(String msg) {
        return ExResult.success(msg, null);
    }
    /**
     * 返回成功消息
     * @param msg  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static ExResult success(String msg, Object data) {
        return new ExResult(Type.SUCCESS, msg, data);
    }
    /**
     * 返回警告消息
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ExResult warn(String msg) {
        return ExResult.warn(msg, null);
    }
    /**
     * 返回警告消息
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static ExResult warn(String msg, Object data) {
        return new ExResult(Type.WARN, msg, data);
    }
    /**
     * 返回错误消息
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ExResult errorTag(String msg) {
        return ExResult.errorTag(msg, null);
    }
    /**
     * 返回错误消息
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static ExResult errorTag(String msg, Object data) {
        return new ExResult(Type.ERROR, msg, data);
    }
    /**
     * 无权限返回
     * @return
     */
    public static ExResult unAuthorized() {
        return new ExResult(Type.UNAUTH, "您没有访问权限！", null);
    }
    /**
     * 无权限
     *
     * @param msg
     * @return
     * @exception
     */
    public static ExResult unAuthorized(String msg) {
        return new ExResult(Type.UNAUTH, msg, null);
    }
    /**
     * 未登录或登录超时。请重新登录
     *
     * @param
     * @return
     * @exception
     */
    public static ExResult unLogin() {
        return new ExResult(Type.UNLOGIN, "未登录或登录超时。请重新登录！", null);
    }
    public Type getType() {
        return type;
    }
    public void setType(Type type) {
        this.type = type;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}
